/*
 * @Author: LaiPZ
 * @Date: 2022-07-30 17:10:21
 * @LastEditTime: 2022-08-01 16:42:37
 * @LastEditors: LaiPZ
 * @Description:
 */
const config = require("./config/index.js");
// 此处安装版本为 1.8.0
const puppeteer = require("puppeteer");

// 主要原理在于使用xpath获取html页面dom元素，脚本代替小手自动触发点击事件
async function giteeUpdate() {
  const browser = await puppeteer.launch({
    // 此处可以使用 false 有头模式进行调试, 调试完注释即可
    headless: false,
    defaultViewport: {
      width: 1920,
      height: 900,
    },
  });
  const page = await browser.newPage();
  await page.goto("https://gitee.com/login");

  // 1. 自动输入账号密码
  let accountElements = await page.$x('//*[@id="user_login"]');
  await accountElements[0].type(config.user);
  let pwdElements = await page.$x('//*[@id="user_password"]');
  await pwdElements[0].type(config.password);

  // 2. 获取登录按钮，触发点击事件
  let loginButtons = await page.$x(
    '//*[@class="git-login-form-fields"]/div[4]/input'
  );
  await loginButtons[0].click();

  // 3. 等待登录成功
  await page.waitFor(1000);
  await page.goto(config.giteePage);

  // 4. 监听触发的确认弹框，并点击确认
  await page.on("dialog", async (dialog) => {
    console.log("确认更新");
    dialog.accept();
  });

  // 5. 点击更新按钮，并弹出确认弹窗
  let updateButtons = await page.$x('//*[@id="pages-branch"]/div[6]');
  await updateButtons[0].click();

  //6. 轮询并确认是否更新完毕
  while (true) {
    await page.waitFor(2000);
    try {
      // 获取更新状态标签
      deploying = await page.$x('//*[@id="pages_deploying"]');
      if (deploying.length > 0) {
        console.log("更新中...");
      } else {
        console.log("更新完毕");
        break;
      }
    } catch (error) {
      console.log(error);
      break;
    }
  }
  await page.waitFor(500);

  // 7.更新完毕，关闭浏览器
  browser.close();
}

giteeUpdate();
